package com.rds.system.mapper;

import com.rds.common.core.domain.entity.Document;
import com.rds.common.core.domain.entity.File;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 文档管理 数据层
 *
 * @author rds
 */
@Repository
public interface DocumentMapper
{
    /**
     * 查询管理数据
     * @param document 信息
     * @return 信息集合
     */
    List<Document> selectDocumentList(@Param("document")Document document);

    /**
     * 查询管理数据
     * @param document 信息
     * @return 信息集合
     */
    List<Document> selectDocumentListByFid(@Param("document")Document document, @Param("folderIdList")Set<Long> folderIdList);

    Document selectDocumentById(Long docId);

    /**
     * 根据集成过来对象Id查询文档
     * @param objectId 集成过来对象Id
     * @return 文档
     */
    Document selectDocumentByObjectId(String objectId);

    /**
     * 新增文档
     * @param document 文档
     * @return 结果
     */
    int insertDocument(Document document);

    /**
     * 修改文档
     * @param document 文档
     * @return 结果
     */
    int updateDocument(Document document);

    /**
     * 批量删除文档
     * @param ids 需要删除的文档ID
     * @return 结果
     */
    int deleteDocumentByIds(Long[] ids);

    /**
     * 删除文档信息
     *
     * @param id 文档ID
     * @return 结果
     */
    int deleteDocumentById(Long id);

    /**
     * 查询版本数据
     * @param id 信息
     * @return 信息集合
     */
    List<Document> selectVersionListByRecordId(Long id);

    /**
     * 查询上下级数据
     * @param document 文档
     * @return 结果
     */
    Long selectUpperLowerLevelByid(Document document);

    /**
     * 查询上下级数据
     * @param id 文档ID
     * @return 文档ID下的ID数量
     */
    int selectDocumentCount(Long id);

    /**
     * 状态转码
     */
    List<Map<String,String>> selectState(Document document);


    /******以下为文档附件相关(原基础上修改) 2021-12-12************/
    /***
     * 根据文档id 查询生效状态的文件附件对象
     * @param docId 文档id
     * @return 文件附件对象
     */
    List<File> selectFileList(Long docId);

    /***
     * 根据文档编码和公司名称 查询生效状态的文件附件对象
     * @param docName,companyName 文档编码，公司名称
     * @return 文件附件对象
     */
    List<File> selectFileListByDocName(@Param("docName")String docName,@Param("companyName")String companyName);


    /***
     * 根据文档id和名称 查询相同名称的文件附件对象
     * @param docId 文档id
     * @return 文件附件对象
     */
    List<File> selectExistFile(@Param("docId")Long docId,@Param("fileName")String fileName);

    /***
     * 根据文件id 查询对象
     * @param ids 文件id
     * @return 文件附件对象
     */
    List<File> selectFileListByIds(Long[] ids);

    /**
     * 新增文件
     * @param file 文件
     * @return 结果
     */
    int insertFile(File file);

    /***
     * 删除单个文件
     * @param id 文件附件id
     * @return 受影响行数
     */
    int deleteFileById(Long id);
    /**
     * 批量删除文档文件
     * @param ids 需要删除的文档ID
     * @return 结果
     */
    int deleteFileByDIds(Long[] ids);
    /**
     * @param id 文件存储表ID
     * @return   结果
     */
    File selectRdaFileByid(Long id);

    /**
     * 只更新文件失效状态
     * @param id 文件
     * @return 结果
     */
    int updateRdaFile(Long id);

    /**
     * 更新文件
     * @param file 文件对象
     * @return 结果
     */
    int updateRdaFile2(File file);

    /*
     * 新增文件
     * @param file 文件
     * @return 结果

    public int insertFile2(File file);*/

    /**
     * 查询失效文档
     * @param docId 文档id
     * @return 结果
     */
    List<File> selectInvalidFileList(Long docId);

    /**
     * 查询当前对象下文档
     * @param objectid 对象文档id
     * @return 结果
     */
    List<Document> selectDocumentByPurposeObjectid(@Param("objectid") Long objectid,@Param("purpose") String purpose);

    /***
     * 根据typeId,name,revision 检查当前对象是否存在
     * @param document 对象
     * @return 返回对象
     */
    List<Document> checkDocumentUnique(Document document);

    /***
     * 根据文档对象、版本号以及状态查询文档附件对象
     * @param paramMap 文档对象Id和版本号Map
     * @return 返回文档附件对象
     */
    File selectPreInactiveFile(Map<String,Object> paramMap);

    /***
     * 根据当前文件附件Id 查询当前附件Id的所有版本
     * @param fileId 文档对象Id
     * @return 返回文档附件对象
     */
    List<File> selectAllRevisionByFileId(Long fileId);

    /***
     * 删除当前附件的的所有版本
     * @param fileIds 文档对象Id
     * @return 返回文档附件对象
     */
    void deleteAllRevisionByFileId(Long[] fileIds);

    /***
     * 查询流程处于当前用户审核/审批的文档对象
     * @param paramMap 对象
     * @return 返回对象
     */
    List<Document> selectMyApproveDoc(Map<String,Object> paramMap);

    /***
     * 根据ids查询文档列表
     * @param ids 文档对象Id
     * @return 返回文档对象
     */
    List<Document> selectDocumentByIds(Long[] ids);

    /**
     * 根据状态描述查询文档
     * @param states 状态描述集合
     * @return 返回文档对象
     */
    List<Document> selectDocumentByState(@Param("states") String[] states,@Param("userid")String userid,@Param("policyid")String policyid,@Param("typeid")String typeid);


    /**
     * 根据状态描述查询文档
     * @param states 状态描述集合
     * @return 返回文档对象
     */
    List<Document> selectPolicyCount(@Param("states") String[] states,@Param("userid") String userid,@Param("typeid")String typeid);

    /**
     * 执行动态拼接sql
     */
    Document selectDocumentBySql(String sql);
}
